package com.heziguo.testDemo.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.heziguo.testDemo.entity.Goddess;
import com.heziguo.testDemo.util.db.DButil;

/**
 * 
 * @ClassName:  GoddessDao 
 * @Package com.heziguo.testDemo.dao    
 * @Description:dao层(这里用一句话描述这个类的作用2)   
 * @author: 贺子国 
 * @date:   2017年12月4日 下午11:04:49   
 *     
 * @Copyright: 2017 www.heziguo.com Inc. All rights reserved. 
 * 注意：
 */
public class GoddessDao {

	public void addGoddess(Goddess g) throws Exception{
		Connection conn = DButil.getConnection();
		String sql = "INSERT INTO goddess (username,sex,age,birthday,email,mobile,createdate,createuser,updateuser,updatedate,isdel)"+
					 "VALUES (?,?,?,?,?,?,'1991-01-09 00:00:00',?,?,'1991-01-09 00:00:00',?)";
		//预编译sql语句
		PreparedStatement psmt = conn.prepareStatement(sql);
		psmt.setString(1, g.getUserName());
		psmt.setInt(2, g.getSex());
		psmt.setInt(3, g.getAge());
        //注意：setDate()函数第二个参数需要的是java.sql.Date类型，我们传进来的是java.util.Date，类型不符，需要做一下转换
		psmt.setDate(4, new Date(g.getBirthday().getTime()));
		psmt.setString(5, g.getEmail());
		psmt.setString(6, g.getMobile());
		psmt.setString(7, g.getCreateUser());
		psmt.setString(8, g.getUpdateUser());
		psmt.setInt(9, g.getIsDel());
		psmt.execute();
		
		 /**
          * prepareStatement这个方法会将SQL语句加载到驱动程序conn集成程序中，但是并不直接执行
          * 而是当它调用execute()方法的时候才真正执行；
          * 
          * 上面SQL中的参数用?表示，相当于占位符，然后在对参数进行赋值。
          * 当真正执行时，这些参数会加载在SQL语句中，把SQL语句拼接完整才去执行。
          * 这样就会减少对数据库的操作
          */
	}
	public void updateGoddess(Goddess g) throws Exception{
		//拿到数据库接
		Connection conn = DButil.getConnection();
		//编写sql语句
		String sql = "UPDATE goddess SET username=?,sex=?,age=?,birthday=?,email=?,"
					+ "mobile=?,updateuser=?,updatedate=?,isdel=? WHERE id = ?";
		//预编译sql
		PreparedStatement psmt = conn.prepareStatement(sql);
		
		psmt.setString(1, g.getUserName());
		psmt.setInt(2, g.getSex());
		psmt.setInt(3, g.getAge());
		psmt.setDate(4, new Date(g.getBirthday().getTime()));
		psmt.setString(5, g.getEmail());
		psmt.setString(6, g.getMobile());		
		psmt.setString(7, g.getUpdateUser());
		psmt.setDate(8, new Date(g.getUpdateDate().getTime()));
		psmt.setInt(9, g.getIsDel());
		psmt.setInt(10, g.getId());
		//执行sql
		//psmt.execute();
		psmt.executeUpdate();
		
		/**
		 * 	executeUpdate：是最基础的数据库的更新、插入和删除操作。效率低下。
			executeQuery：是最基础的执行查询语句，同样也是效率低下。
			execute：兼具上面二者的功能但返回一个boolean型变量
			executeBatch：n个SQL语句初始化好，一起提交给数据库执行，效率很高！！！建议使用。
		 */
	}
	public void delGoddess(){
		
	}
	public List<Goddess> query() throws Exception{
		Connection conn = DButil.getConnection();
		Statement stemt =conn.createStatement();
		ResultSet set = stemt.executeQuery("select * from goddess");
		List<Goddess> goddessList = new ArrayList<>();
		Goddess goddess = null;
		while(set.next()){
			goddess = new Goddess();
			goddess.setUserName(set.getString("username"));
			goddess.setAge(set.getInt("age"));
			goddessList.add(goddess);
			
		}
		return goddessList;
	}
	
	
	@Test
	public void testAdd(){
		Goddess g1=new Goddess();
        g1.setUserName("小夏");
        g1.setAge(22);
        g1.setSex(1);
        g1.setBirthday(new java.util.Date());
        g1.setEmail("xiaoxia@qq.com");
        g1.setMobile("123456789");
        g1.setCreateUser("admin");
        g1.setUpdateUser("admin");
        g1.setIsDel(1);
        //添加女神
        try {
			addGoddess(g1);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Test
	public void testUpdate(){
		Goddess g1=new Goddess();
        g1.setId(2);
		g1.setUserName("小夏");
        g1.setAge(27);
        g1.setSex(1);
        g1.setBirthday(new java.util.Date());
        g1.setEmail("xiaoxia@qq.com");
        g1.setMobile("0123456789");
        //g1.setCreateUser("admin");
        g1.setUpdateUser("admin2");
        g1.setUpdateDate(new java.util.Date());
        g1.setIsDel(1);
        try {
			updateGoddess(g1);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        
	}
	
}
